/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pagrafo.grafo;

import java.util.ArrayList;

/**
 *
 * @author Fabricio
 */
public class Grafo {
    
    /**
     * vertices do grafo
     */
    private ArrayList<Vertice> vertices;
    
    /**
     * Peso de uma aresta
     * 
     */
    private double[][] pesos;
    private int dimensao = 0;

    public int getDimensao() {
        return dimensao;
    }

    public void setDimensao(int dimensao) {
        this.dimensao = dimensao;
    }

    public double[][] getPesos() {
        return pesos;
    }

    public void setPesos(double[][] pesos) {
        this.pesos = pesos;
    }

    public ArrayList<Vertice> getVertices() {
        return vertices;
    }

    public void setVertices(ArrayList<Vertice> vertices) {
        this.vertices = vertices;
    }

    
    
    /**
     * Construtor simples do grafo, para a adição de um vertices ou calculo do peso é preciso chamar as funções públicas
     */
    public Grafo(){
        vertices = new ArrayList<Vertice>();
    }
    
    /**
     * Construtor do Grafo tendo das informações sobre todos os vertices
     * @param x vetor de coordenadas x
     * @param y vetor de coordenadas y
     * @param d vetor de demandas
     */
    public Grafo(double[] x, double[] y, double[] d){
        vertices = new ArrayList<Vertice>();
        for(int i = 0; i < x.length; i++){
            Vertice v = new Vertice(x[i],y[i],d[i]);
            vertices.add(v);
        }
        this.calcularPesos();
    }
    
    public void addVertice(double x, double y, double demanda){
        vertices.add(new Vertice(x,y,demanda));
    }
    
    public void addVertice(double x, double y){
        vertices.add(new Vertice(x,y));
    }
    
    public double getPeso(int a, int b){
        return pesos[a][b];
    }
    
    public double getDemanda(int a){
        
        if(a ==0){
            return 0;
        }
        
        return vertices.get(a).getDemanda();
    }
    
    public int sizeVertices(){
        return vertices.size();
    }
    
    public Vertice getVertice(int i){
        return vertices.get(i);
    }
    
    public void calcularPesos(){
        pesos = new double[vertices.size()][vertices.size()];
        for(int i = 0; i < vertices.size(); i++){
            for(int j = 0; j < vertices.size(); j++){
                pesos[i][j] = peso(i,j);
            }
        }
    }
    
    private double peso(int a, int b){
        return Math.sqrt(Math.pow(vertices.get(b).getX()-vertices.get(a).getX(), 2)+Math.pow(vertices.get(b).getY()-vertices.get(a).getY(), 2));
    }
}
